package com.hliushi.mp.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.hliushi.mp.entity.enums.SexEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author llhuang10
 * @date 2021/8/28 15:26
 */
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName("tb_user")
public class User extends Model<User> {

    private static final long serialVersionUID = 7806224922678677478L;
    /**
     * mp 内置了 id类型生成方式
     * 当实体与表中的主键的字段完全相同时 (猜测: 驼峰实体可以对应下划线表字段)
     * #
     * 这个 @TableId 才可以省略, 否则省略就报错, 如果省略的话
     * id的生成策略为 NONE, 这个就是未设置主键类型, 将全局随机
     * 2021年8月29日14:51:09, 省略了@TableId注解, 但又想配置Id策略, 可以通过全局配置文件来做到
     * #
     * 当前也可以自己指定id生成策略,
     * IdType.AUTO  -> 数据库id自增
     * #
     * todo 思考: 如何指定 雪花算法id生成器
     */

    @TableId(type = IdType.AUTO)
    private Long id;
    private String userName;

    @TableField(select = false) // 查询时不返回该字段值
    private String password;
    private String name;
    private Integer age;

    /**
     * . @TableField 指定数据库表中字段名
     * . fill = FieldFill.INSERT 插入数据时填充字段
     */
    @TableField(value = "email", fill = FieldFill.INSERT)
    private String mail;


    @TableField(exist = false)
    private String addr; // 在数据库表中是不存在的

    /**
     * 乐观锁的版本字段
     */
    @Version
    private Integer version;

    /**
     * 逻辑删除字段, 1-删除, 0-未删除
     */
    @TableLogic
    private Integer isDeleted;

    /**
     * 性别, 枚举类型
     */
    private SexEnum sex;
}
